<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //1.创建 Set 对象
        const s1 = new Set();
        const s2 = new Set([1, 2, 3, 4, 5])

        //2.属性 size 表示 Set对象里面的数组长度
        console.log(s1.size);
        console.log(s2.size);

        //3. add 添加元素
        s1.add(1).add(2).add(4)
        console.log(s1);

        //4.delete 删除元素
        s1.delete(2);
        console.log(s1)

        //5. has() 判断是否含有指定的元素
        console.log(s2.has(5));
        console.log(s2.has(3));

        //6.clear 清除所有成员
        const s3 = new Set([1, 2, 3, 4, 5]);
        s3.clear()
        console.log(s3);

        // 7. for of  创建一个迭代循环 ，调用自定义迭代钩子 ，并为每个不同属性的执行语句
        // for(let a  of s2){
        //     console.log(a); 
        // }

        // 8.forEach  数组或对象集合中的每个元素重复一个嵌入语句组
        // s2.forEach(value>={
        //   console.log(a); 

        // })

        // 9.set中的值不能重复
        const set = new Set([1, 2, 3, 4, 5, 3, 2, 1]);
        console.log(set);

        //10.add的value值为对象时 Set不能去重
        const set1 = new Set();
        var obj = { name: "html" };
        var obj2 = { name: "script" };
        set1.add(obj).add(obj2);
        console.log(set1);

    </script>
    <script>
        // 使用Set 数组去重  为数组转换为数组
        var set2 = new Set([1, 2, 3, 1, 2, 5, 6]);
        console.log(set2);//伪数组
        console.log([...set2]);//将伪数组转换为数组
        console.log(Array.from(set2));//将伪数组转换为数组
    </script>
    <script>
        // ...：表示扩展运算符
        var a = new Set([1,2,3]);
        var b = new Set([4,2,3]);
        //并集
        var union = new Set([...a,...b]);
        console.log(union)
        //交集
        var undon = new Set([...a].filter(z=>b.has(z)))
        console.log(undon)
        //差集
        var unfin = new Set([...a].filter(z=>!b.has(z)));
        console.log(unfin);

        //filter 把某些元素过滤掉 然后返回剩下的元素
    </script>
</body>

</html>